package com.yuzhitong.shapi.net;

import com.yuzhitong.shapi.base.net.BaseListBean;
import com.yuzhitong.shapi.base.net.BaseObjectBean;
import com.yuzhitong.shapi.bean.AdStatusBean;
import com.yuzhitong.shapi.bean.CategoryBean;
import com.yuzhitong.shapi.bean.DomainBean;
import com.yuzhitong.shapi.bean.HomeListBean;
import com.yuzhitong.shapi.bean.MovieBean;
import com.yuzhitong.shapi.bean.NavigationBean;
import com.yuzhitong.shapi.bean.PlayAddressBean;
import com.yuzhitong.shapi.bean.PlayListBean;
import com.yuzhitong.shapi.bean.SearchMovieBean;
import com.yuzhitong.shapi.bean.UpdateBean;

import java.util.Map;

import io.reactivex.rxjava3.core.Observable;
import okhttp3.ResponseBody;
import retrofit2.http.GET;
import retrofit2.http.QueryMap;
import retrofit2.http.Streaming;
import retrofit2.http.Url;

/**
 * 网络请求 API接口
 */
public interface APIService {


    // POST请求
//    @FormUrlEncoded
//    @POST("app/appLogin")
//    Observable<BaseObjectBean<UserBean>> login(@FieldMap Map<String, Object> par);

    // POST上传
//    @Multipart
//    @POST("app/upload")
//    Observable<BaseObjectBean<String>> updateAvatar(@Part MultipartBody.Part file, @Query("userId") String userId);

    // GET下载
//    @Streaming
//    @GET
//    Observable<ResponseBody> downloadFile(@Url() String url);

    /**
     * 下载文件
     *
     * @param url 下载url
     */
    @Streaming
    @GET
    Observable<ResponseBody> download(@Url String url);


    // 动态域名
    @Streaming
    @GET("/dynamic/ip")
    Observable<BaseObjectBean<DomainBean>> getUrlTop(@QueryMap Map<String, Object> par);


    // 广告开关
    @Streaming
    @GET
    Observable<BaseListBean<AdStatusBean>> adState(@Url String url, @QueryMap Map<String, Object> par);

    // 搜索框接口
    @Streaming
    @GET
    Observable<BaseObjectBean<String>> search(@Url String url, @QueryMap Map<String, Object> par);

    // 首页导航列表
    @Streaming
    @GET
    Observable<BaseListBean<HomeListBean>> homeList(@Url String url, @QueryMap Map<String, Object> par);

    // 导航页面接口
    @Streaming
    @GET
    Observable<BaseListBean<NavigationBean>> navigationList(@Url String url, @QueryMap Map<String, Object> par);

    // 帮助反馈
    @Streaming
    @GET
    Observable<BaseObjectBean<String>> helpSubmit(@Url String url, @QueryMap Map<String, Object> par);

    // 版本更新
    @Streaming
    @GET
    Observable<BaseObjectBean<UpdateBean>> update(@Url String url, @QueryMap Map<String, Object> par);

    // 获取全部分类
    @Streaming
    @GET
    Observable<BaseListBean<CategoryBean>> getCategory(@Url String url, @QueryMap Map<String, Object> par);

    // 按条件搜索电影
    @Streaming
    @GET
    Observable<BaseListBean<MovieBean>> getMovieList(@Url String url, @QueryMap Map<String, Object> par);

    // 获取热门
    @Streaming
    @GET()
    Observable<BaseListBean<MovieBean>> getHot(@Url String url, @QueryMap Map<String, Object> par);

    // 今日推荐电影
    @Streaming
    @GET
    Observable<BaseListBean<MovieBean>> getDayHot(@Url String url, @QueryMap Map<String, Object> par);

    // 今日推荐电影
    @Streaming
    @GET
    Observable<BaseListBean<MovieBean>> getLike(@Url String url, @QueryMap Map<String, Object> par);

    // 直搜结果
    @Streaming
    @GET
    Observable<BaseListBean<SearchMovieBean>> getMovieListByName(@Url String url, @QueryMap Map<String, Object> par);

    // 根据ID获取电影
    @Streaming
    @GET
    Observable<BaseObjectBean<PlayListBean>> getVideoById(@Url String url, @QueryMap Map<String, Object> par);

    // 获取播放地址
    @Streaming
    @GET
    Observable<BaseObjectBean<String>> getPlayAddress(@Url String url, @QueryMap Map<String, Object> par);

    // 获取第三方接口
    @Streaming
    @GET
    Observable<BaseObjectBean<PlayAddressBean>> getPlayAddressNew(@Url String url, @QueryMap Map<String, Object> par);

    // 获取播放地址   使用全路径
//    @Get , @Post 全路径
//    @Streaming
//    @GET("/videos/getPlayerUrl")
//    Observable<BaseObjectBean<String>> getPlayAddress(@QueryMap Map<String, Object> par);
}
